package controle;

import java.util.ArrayList;
import java.util.List;

import javax.swing.JOptionPane;

import DAO.FuncionarioDAO;
import DAO.DAOFactory;
import DAO.FuncionarioDAO;
import modelo.Funcionario;
import modelo.Funcionario;

/**
 * 
 * @author douglas_joaquim
 *
 *Controle funcionario emplementa funcionario
 */
public class ControleFuncionario implements Controle<Funcionario> {
	

	/**
	 * Salva funcionario com os dados
	 * id_time, id_localizacao, sobrenome, cpf, email, nome, senha, sexo,
	 * nascimento
	 */
	@Override
	public void salvar(Funcionario e) throws Exception {
		
		if (e.getCpf().equals("")) {
			throw new Exception("CPF eh obrigatorio");
		}
		if (e.getEmail().equals("")) {
			throw new Exception("E-mail eh obrigat@rio");
		}
		if (e.getCtps().equals("")) {
			throw new Exception("CTPS @ obrigat@rio");
		}
		
		ControleLocalizacao controleLocalizacao = new ControleLocalizacao();
		controleLocalizacao.salvar(e.getLocalizacao());
		e.setLocalizacao(controleLocalizacao.buscar(e.getLocalizacao()).get(0));
		
		if (e.getNome().equals("")) {
			throw new Exception("Nome @ obrigat@rio");
		}
		if (e.getSobrenome().equals("")) {
			throw new Exception("Sobrenome @ obrigat@rio");
		}
		
		if (e.getNascimento().equals("")) {
			throw new Exception("Nascimento @ obrigat@rio");
		}

		FuncionarioDAO funcionarioDAO = DAOFactory.getFuncionarioDAO();
		if(e.getId()==0){
			
		funcionarioDAO.salvar(e);
		JOptionPane.showMessageDialog(null, "Seu Funcionario foi salvo com sucesso");
		}else{
			funcionarioDAO.alterar(e);
			JOptionPane.showMessageDialog(null, "Seu Funcionario foi alterado com sucesso");
		}
	}
/**
 * Exclui funcionarios
 */
	@Override
	public void excluir(Funcionario e) {
		ControleLocalizacao controleLocalizacao = new ControleLocalizacao();
		controleLocalizacao.excluir(e.getLocalizacao());
		FuncionarioDAO funcionarioDAO = DAOFactory.getFuncionarioDAO();
		funcionarioDAO.deletar(e);

	}
	
	/**
	 * busca e cria uma lista de funcionarios por cpf, email, nome e id
	 */
	@Override
	public List<Funcionario> buscar(Funcionario e) throws Exception {
		List<Funcionario> funcionarios = new ArrayList<Funcionario>();
			
		if (e.getCpf() != null && !e.getCpf().equals("")) {
			FuncionarioDAO funcionarioDAO = DAOFactory.getFuncionarioDAO();
			funcionarios = funcionarioDAO.buscaFuncionarioPorCpf(e);
		}
		else if (e.getEmail().length() != 0) {
			FuncionarioDAO funcionarioDAO = DAOFactory.getFuncionarioDAO();
			funcionarios = funcionarioDAO.buscaFuncionarioPorEmail(e);
		}
	
	else {if (e.getNome().length() != 0) {
			FuncionarioDAO funcionarioDAO = DAOFactory.getFuncionarioDAO();
			funcionarios = funcionarioDAO.buscaFuncionarioPorNome(e);
		}  else if (e.getId() != 0) {
			FuncionarioDAO funcionarioDAO = DAOFactory.getFuncionarioDAO();
			funcionarios = funcionarioDAO.buscaFuncionarioPorId(e);
		}else {
		
			throw new Exception("Dados sao obrigat@rio");
		}}
		return funcionarios;
	}
	/**
	 * Busca cria e retorna uma lista de todos Funcionarios
	 */
	@Override
	public List<Funcionario> buscarTodos() {
		List<Funcionario> funcionarios = new ArrayList<Funcionario>();
		FuncionarioDAO funcionarioDAO = DAOFactory.getFuncionarioDAO();
		funcionarios = funcionarioDAO.findAll();
		return funcionarios;

	}
}
